#include<stdio.h>
#define N 100

typedef struct 
{
    int no;            //学号
    char name[20];     //姓名
    char sex;          //性别
    int score;         //成绩
}SqStu,*Sqlink;

int length=0;
SqStu database[N];    //这里将结构体作为全局变量，函数中其实可以不用传结构体

void Insert(SqStu database[],int order)
{
    int temp,pos;
    if(order==0)
    {
        scanf("%d %s %c %d",&database[length].no,database[length].name,
        &database[length].sex,&database[length].score);
        length++;
    }
    else
    {
        scanf("%d",&temp);
        pos=Findpos(temp);
        for(int j=length-1;j>=pos;j--)
        {
            database[j+1]=database[j];
        }
        database[pos].no=temp;
        scanf(" %s %c %d",database[pos].name,
        &database[pos].sex,&database[pos].score);
        length++;
        printf("有序插入成功\n");
    }
}

int Findpos(int no)  //寻找插入位置
{
    int pos,i;
    for(i=0;i<length;i++)
    {
        if(no>database[i].no&&no<database[i+1].no)
        {
            pos=i+1;
            break;
        }
    }
    if(i==length)  printf("找不到位置\n");
    return(pos);
}

void UnPass(SqStu database[],int type)
{
    int count=0;
    for(int i=0;i<length;i++)
    {
        if(database[i].score<60)
        {
            count++;
            if(type==1) Delete(database,i);
        }
    }
    if(type==0) printf("不及格人数为：%d\n",count);
}

int Delete(SqStu database[],int pos)
{
    for(int i=pos+1;i<length;i++)
    {
        database[i-1]=database[i];
        printf("删除不及格学生数据成功 学号%d\n",database[pos].no);
        length--;
    }
}

void Print(SqStu database[])
{
    printf("-----------------\n");
    printf("当前状态顺序表:\n");
    for(int i=0;i<length;i++)
    {
        printf("%d %s %c %d\n",database[i].no,database[i].name,database[i].sex,database[i].score);
    }
    printf("-----输出结束-----\n");
}

int main()
{
    printf("\n题目1:升序形式初始化线性表\n");
    for(int i=0;i<5;i++)
    {
        Insert(database,0);    //0表示无需查找插入位置，1表示需要查找插入位置
    }
    Print(database);

    printf("\n题目2:有序插入一条新数据\n");
    Insert(database,1);
    Print(database);

    printf("\n题目3:查找统计不合格数据\n");
    UnPass(database,0);  //0表示不删除不及格学生信息，1表示删除不及格学生信息

    printf("\n题目4:删除不及格学生数据\n");
    UnPass(database,1);
    Print(database);
}
